package br.com.news.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.news.dao.interfaces.ICategoriaDao;
import br.com.news.dao.util.GenericDao;
import br.com.news.exception.DataException;
import br.com.news.modal.CategoriaBean;

public class CategoriaDao extends GenericDao<CategoriaBean> implements ICategoriaDao {

	public CategoriaDao(Context context) {
		super(context);
	}

	@Override
	public CategoriaBean preencheAtributos(Cursor c) {

		int idxIdCat = c.getColumnIndex(CategoriaBean.ID_CATEGORIA);
		int idxDes = c.getColumnIndex(CategoriaBean.DESCRICAO);
		int idxSel = c.getColumnIndex(CategoriaBean.SELECIONADA);

		CategoriaBean categoriaBean = new CategoriaBean();
		categoriaBean.setIdCategoria(c.getLong(idxIdCat));
		categoriaBean.setDescricao(c.getString(idxDes));
		categoriaBean.setSelecionada(c.getInt(idxSel) > 0);

		return categoriaBean;
	}

	@Override
	public ContentValues preencheValores(CategoriaBean entity) {
		ContentValues values = new ContentValues();
		values.put(CategoriaBean.ID_CATEGORIA, entity.getIdCategoria());
		values.put(CategoriaBean.DESCRICAO, entity.getDescricao());
		values.put(CategoriaBean.SELECIONADA, entity.isSelecionada());
		return values;
	}

	@Override
	public List<CategoriaBean> preencheAtributosList(Cursor c) {

		int idxIdCat = c.getColumnIndex(CategoriaBean.ID_CATEGORIA);
		int idxDes = c.getColumnIndex(CategoriaBean.DESCRICAO);
		int idxSel = c.getColumnIndex(CategoriaBean.SELECIONADA);

		List<CategoriaBean> categoriaBeans = new ArrayList<CategoriaBean>();

		if (c.getCount() > 0) {
			do {

				CategoriaBean categoriaBean = new CategoriaBean();
				categoriaBean.setIdCategoria(c.getLong(idxIdCat));
				categoriaBean.setDescricao(c.getString(idxDes));
				categoriaBean.setSelecionada(c.getInt(idxSel) > 0);

				categoriaBeans.add(categoriaBean);

			} while (c.moveToNext());
		}

		return categoriaBeans;
	}

	@Override
	public List<CategoriaBean> buscaCategoriasPorSelecionada(boolean selecionada) throws DataException {
		try {
			String where = String.format("%s = ? ", CategoriaBean.SELECIONADA);
			String[] whereArgs = new String[] { String.valueOf(selecionada ? 1 : 0) };
			String orderBy = String.format("%s desc", CategoriaBean.ID_CATEGORIA);

			return findWhere(new CategoriaBean(), where, whereArgs, orderBy);

		} catch (Exception e) {
			throw new DataException(String.format("<CategoriaDao> Falha ao buscar categorias por selecionada."), e);
		}
	}

}
